<div style="font-size:10.5pt;line-height:1.5;background-color:#FCF2E0;padding:10px;">
<h1 style="font-size:24pt;text-align:center;"><span>联盟数字货币结算处(珠蚌)抛砖引玉版</span></h1>
<p class="MsoNormal" style="text-align:center;"><span>通用标识：UnionidCurrency</span></p>
<p class="MsoNormal" style="text-align:center;"><span>珠蚌工作室：www.Unionid.net</span></p>

<h2 style="text-align:center;"><span>引言</span></h2>
<p class="MsoNormal"><span>货币会在市场中不停的流通，你手里的货币可能来自某个家庭的生活费，或者某个人的零钱，又或者某个公司的工资，也可能来自某个江湖骗子的不正当所得。每张货币上都有一个编号，但这个编号并没有被好好利用起来，如果每个人都把自己的货币编号记录下来，就可以通过这些记录查询一张货币的流通全过程，非法所得就会无所遁形。</span></p>

<h3><span>一个小游戏</span></h3>
<p class="MsoNormal"><span>为货币编号做记录很不现实，虽然能带来一些好处，但也有坏处。我们先不考虑其他因素，只考虑技术上的可行性，来玩个数字小游戏：

假如你的游戏账户里有1000个金币，你花了50个，还剩950个，这种记录方式太笼统，你不知道你花出去的50个金币是哪50个。</span></p>
<p class="MsoNormal"><span>如果把数字1看成是第1个金币，数字2看成是第2个金币，数字3看成是第3个金币，以此类推，数字1000看成是第1000个金币，每个数字对应一个金币，1000个金币就是1000个数字，花出去50就把50个数字给对方而不是简单的-50，这样就可以知道花的是哪50个了。</span></p>
<p class="MsoNormal"><span>实际上1000个金币我们并不需要记录1000个数字，只需记录1000这一个数字就行，因为其他999个数字都包含在1000里面，需要支付50个金币时，把1000这个数字换成0、1、2、3、4、5、6、7、8、9、10、20、30、40、50、60、70、80、90、100、200、300、400、500、600、700、800、900，个位数表示1个金币，整十数表示10个金币，整百数表示100个金币，其中0表示1个金币，10表示10个金币，20也表示10个金币，100表示100个金币，900也只表示100个金币，10个1+9个10+9个100=1000金币，把1个1000的数字换成了28个数字。支付时也不需要50个数字，只需使用10、20、30、40、50这5个10就行。</span></p>
<p class="MsoNormal"><span>上面这种换算方法比较好理解，但继续换算就会出问题，需要再支付70个金币怎么办？每个金币都是唯一的，100这个数继续换算就会出现重复数字，而且0是无意义的。</span></p>
<p class="MsoNormal"><span>能看到这里说明你已经上路了，换种思路：<b>使用位数相同的数字来表示相同的货币面额，如果位数少1位则该数字实际面额需要x10，位数少2位则该数字实际面额需要x100，位数少3位则该数字实际面额需要x1000。</b></span></p>
<p class="MsoNormal"><span>1000个金币用数字1即可表示，换算成小面额则是1000、1001、1002、1003、1004、1005、1006、1007、1008、1009、101、102、103、104、105、106、107、108、109、11、12、13、14、15、16、17、18、19，同样是28个数字，4位数表示1金币，1000表示1个金币，3位数表示10金币，2位数表示100金币，10个1+9个10+9个100=1000金币，支付50金币时使用101、102、103、104、105这5个10，再支付70金币时将11这一个数换成110、111、112、113、114、115、116、117、118、119，使用其中7个3位数来支付即可。</span></p>
<p class="MsoNormal"><span>现在将数字放大，用一个17位数12345678901234567来表示一个货币，那么数字1表示多少货币？</span></p>

<h2 style="text-align:center;"><span>联盟数字货币</span></h2>
<p class="MsoNormal"><span>联盟不产货币，联盟内的数字货币是通过其他渠道充值得来，比如通过银行卡充值100元人民币，在联盟内会转换成一个15位数123456789012345来表示这100元。<br>
换算成10个面额为10元的16位数：1234567890123450 ～ 1234567890123459<br>
换算成100个面额为1元的17位数：12345678901234500 ～ 12345678901234599<br>
换算成1000个面额为1角的18位数：123456789012345000 ～ 123456789012345999<br>
换算成10000个面额为1分的19位数：1234567890123450000 ～ 1234567890123459999<br>
以此类推：14位数表示1千，13位数表示1万，11位数表示1百万，9位数表示1亿。<br>
这就是<b>联盟数字货币：一个数字对应一个货币。</b>这些数字货币仅供联盟内部使用。</span></p>

<h3><span>数字的存储和流通</span></h3>
<p class="MsoNormal"><span>联盟结算处负责数字货币的存储，为数字货币提供专用的公证服务，用最低的成本对所有数字货币的流通做记录，每个数字货币对应一条存储记录，数字货币易主后原记录将被固化存储。交易过程在联盟客户端完成，结算处只会对数字货币的流通做记录，结算处的历史流通记录要经得起反复推算来自证。虽然比笼统的加减值要多消耗不少资源，但让货币有了可追溯性。</span></p>
<table border="1">
    <tbody>
        <tr>
            <th>数字货币编号</th>
            <th>拥有者</th>
            <th>获得时间</th>
            <th>初始密码</th>
            <th>易主次数</th>
            <th>状态</th>
        </tr>
        <tr>
            <td>1234567890123</td>
            <td>987654321123456784</td>
            <td>1719763200000</td>
            <td>32字符</td>
            <td>5</td>
            <td>正常流通</td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal"><span>&nbsp;</span></p>
<table border="1">
    <tbody>
        <tr>
            <th>数字流通记录</th>
            <th>拥有者Unionid</th>
            <th>获得时间</th>
            <th>历史密码</th>
            <th>第几次易主</th>
        </tr>
        <tr>
            <td>1234567890123</td>
            <td>987654321123456783</td>
            <td>1711900800000</td>
            <td>32字符</td>
            <td>4</td>
        </tr>
        <tr>
            <td>1234567890123</td>
            <td>987654321123456782</td>
            <td>1709222400000</td>
            <td>32字符</td>
            <td>3</td>
        </tr>
        <tr>
            <td>1234567890123</td>
            <td>987654321123456781</td>
            <td>1706716800000</td>
            <td>32字符</td>
            <td>2</td>
        </tr>
        <tr>
            <td>1234567890123</td>
            <td>999999999123456789</td>
            <td>1704038400000</td>
            <td>32字符</td>
            <td>1</td>
        </tr>
    </tbody>
</table>

<h3><span>数字的分配和回收</span></h3>
<p class="MsoNormal"><span>联盟结算处负责数字货币的分配和回收，主体通过联盟客户端从联盟外往联盟内转入货币时，货币实际转入到联盟结算处，结算处分配等面额的数字给该主体。</span></p>
<p class="MsoNormal"><span>主体通过联盟客户端从联盟内往联盟外转出货币时，联盟结算处负责回收转出的联盟数字货币，并将真实货币转入主体的外部收款账户中。</span></p>
<p style="color:#C00000"><span>易主后的初始密码算法 = hash_hmac('md5', '结算处自定义密码规则+数字编号', null)</span></p>
<p style="color:#C00000"><span>易主后的最终密码算法 = hash_hmac('md5', '初始密码+数字编号', '主体自定义交易密码')</span></p>

<h3><span>自动换零</span></h3>
<p class="MsoNormal"><span>主体A向主体B付款128元，如果主体A只有100元面额的数字货币，联盟客户端会自动将100元面额做换零处理，再直接交易给主体B，交易过程中双方只会发生一次交易请求。</span></p>
<p style="color:#C00000"><span>换零后的最终密码算法 = hash_hmac('md5', '初始密码+数字编号', '主体自定义交易密码')</span></p>

<h3><span>自动换整</span></h3>
<p class="MsoNormal"><span>主体账号内低流通频率的小额货币满足换整条件时，结算处会在服务器空闲时自动将其换成未分配的大额货币，以减少存储记录方便交易。</span></p>

<h3><span>贡献值的存储</span></h3>
<p class="MsoNormal"><span>联盟结算处将同时负责联盟贡献值的存储。<br>
联盟贡献值与联盟数字货币是相对独立的，贡献值的存储方式和交易流程与数字货币一样，但贡献值的编号与数字货币的编号没有任何关系。<br>
联盟贡献值不能流通，不能转移，主体通过结算处进行附带贡献值类型的收支操作时将自动分配或回收等量的贡献值，贡献值并不是由主体自主分配或回收。</span></p>


<h2 style="text-align:center;"><span>联盟数字货币</span></h2>
<p class="MsoNormal"><span>联盟结算处是一个团体，同样拥有《联盟基础协议》中的团体公有账号和团体私有账号，会自动为每个交易主体创建一个子账号，结算处的所有使用者都是该结算处的团体成员。团体成员有权选择一些风险极低的短期投资项目进行投票，通过后团体可将部分余额用于投资这些项目以增加结算处的收益。一个主体可同时使用多个联盟结算处。</span></p>

<h3><span>获取结算处资格和数字货币</span></h3>
<p class="MsoNormal"><span>有数字货币管理能力的团体可尝试申请结算处资格，但门槛较高。<br>
<b>第一步：</b>到“联盟基金会(待成立)”登记并核实团体身份，由联盟所有主体投票表决申请资格。<br>
<b>第二步：</b>表决通过后根据联盟结算处开源文档搭建好自己的结算平台。<br>
<b>第三步：</b>邀请投票者参与公测，公测人员可获得该结算处的支援报酬和贡献值收益。<br>
<b>第四步：</b>到“联盟基金会(待成立)”发布联盟结算平台源代码，签署《联盟结算处协议》<br>
<b>第五步：</b>有源代码开发能力的联盟团体均可参与源代码的审核，参与审核的团体须签署《联盟结算处源代码审核协议》，可获得该结算处的支援报酬和贡献值收益。<br>
<b>第六步：</b>从“联盟基金会(待成立)”获取9位数字的分配权，并由所有联盟公证处进行公证；下载所有结算平台名单和关联的数字名单。</span></p>
<p class="MsoNormal"><span><b>注意事项：</b><br>
结算处源代码安全要求甚高，源代码可以共享，不一定得自己开发。<br>
结算处须拥有资产管理资格，以管理所有成员的真实货币资产。</span></p>

<h3><span>结算流程图</span></h3>
<p class="MsoNormal"><span><img border="0" width="100%" src="unionid.currency.flow.png" style="max-width:800px;" /></span></p>

<h3><span>数字的交易和结算</span></h3>
<p class="MsoNormal"><span>一个主体可以到多个联盟结算处申请结算服务，联盟客户端会将主体自己拥有的数字货币名单加密存储一份在本地，交易完成后再向自己所选的结算处发送交易结果请求。</span></p>
<p class="MsoNormal"><span><b>默认结算处：</b>数字货币前9位所属的结算处，也就是数字货币的原始分配方。每个数字货币只会有一个默认结算处，默认结算处会为每一个数字货币分配一个初始密码，每个结算处的每个使用者都有自定义的交易密码。同一主体允许拥有多个联盟客户端或多个联盟账号，但一个数字货币只能对应一个联盟客户端中的一个联盟账号。</span></p>
<table border="1">
    <tbody>
        <tr>
            <th>数字货币原始编号</th>
            <th>结算处Unionid</th>
            <th>易主次数</th>
            <th>状态</th>
        </tr>
        <tr>
            <td>123456789（1亿）</td>
            <td>999999999123456789</td>
            <td>1</td>
            <td>没有对应的真实货币</td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal"><span><b>第一步：</b>付款方先通过结算处使用真实货币进行充值获得联盟数字货币，真实货币由结算处代管。也可将主体的其他联盟客户端或其他联盟账号中的数字货币通过主体内部转移到当前联盟客户端的当前联盟账号内。</span></p>
<table border="1">
    <tbody>
        <tr>
            <th>充值1万数字货币</th>
            <th>充值者Unionid</th>
            <th>易主次数</th>
            <th>状态</th>
        </tr>
        <tr>
            <td>1234567890123</td>
            <td>888888888123456782</td>
            <td>2</td>
            <td>正常流通</td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal"><span><b>第二步：</b>付款方收到付款请求后，将对应的数字货币和密码通过联盟客户端加密发送给收款方，付款方客户端第一时间冻结这些数字货币。交易已支付完成但这些数字货币暂时不能再流通，可以继续该交易的后续处理，待双方客户端和相关结算处全部确认后这些数字货币才会恢复为“正常流通”状态，只有“正常流通”状态的数字货币才能进行交易。</span></p>
<table border="1">
    <tbody>
        <tr>
            <th>将1万拆分成10个千</th>
            <th>付款者Unionid</th>
            <th>易主次数</th>
            <th>状态</th>
        </tr>
        <tr>
            <td>12345678901239</td>
            <td>888888888123456782</td>
            <td>2</td>
            <td>正常流通</td>
        </tr>
        <tr>
            <td>12345678901238</td>
            <td>888888888123456782</td>
            <td>2</td>
            <td>正常流通</td>
        </tr>
        <tr>
            <td>12345678901237</td>
            <td>888888888123456782</td>
            <td>2</td>
            <td>正常流通</td>
        </tr>
        <tr>
            <td>12345678901236</td>
            <td>888888888123456782</td>
            <td>2</td>
            <td>正常流通</td>
        </tr>
        <tr>
            <td>12345678901235</td>
            <td>888888888123456782</td>
            <td>2</td>
            <td>正常流通</td>
        </tr>
        <tr>
            <td><b style="color:#C00000;">12345678901234</b></td>
            <td><b style="color:#C00000;">888888888123456782</b></td>
            <td><b style="color:#C00000;">2</b></td>
            <td><b style="color:#C00000;">正常流通</b></td>
        </tr>
        <tr>
            <td>12345678901233</td>
            <td>888888888123456782</td>
            <td>2</td>
            <td>正常流通</td>
        </tr>
        <tr>
            <td>12345678901232</td>
            <td>888888888123456782</td>
            <td>2</td>
            <td>正常流通</td>
        </tr>
        <tr>
            <td>12345678901231</td>
            <td>888888888123456782</td>
            <td>2</td>
            <td>正常流通</td>
        </tr>
        <tr>
            <td><b style="color:#00B050;">12345678901230</b></td>
            <td><b style="color:#00B050;">888888888123456782</b></td>
            <td><b style="color:#00B050;">2</b></td>
            <td><b style="color:#00B050;">正常流通</b></td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal"><span><b>第三步：</b>付款方联盟客户端自动向默认结算处发送付款确认请求，默认结算处收到付款方的请求后货币即处于“待收款”状态。</span></p>
<table border="1">
    <tbody>
        <tr>
            <th>付款1千数字货币</th>
            <th>收款者Unionid</th>
            <th>易主次数</th>
            <th>状态</th>
        </tr>
        <tr>
            <td><b style="color:#00B050;">12345678901230</b></td>
            <td>777777777123456783</td>
            <td>3</td>
            <td>待收款/待确认</td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal"><span><b>第四步：</b>收款方客户端自动向默认结算处发送收款请求，默认结算处如果先收到收款方的请求则货币处于“待确认”状态。</span></p>
<table border="1">
    <tbody>
        <tr>
            <th>数字货币编号</th>
            <th>收款者Unionid</th>
            <th>易主次数</th>
            <th>状态</th>
        </tr>
        <tr>
            <td><b style="color:#00B050;">12345678901230</b></td>
            <td>777777777123456783</td>
            <td>3</td>
            <td>交易双方已确认</td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal"><span><b>第五步：</b>付款方客户端将数字货币和密码发送给其他结算处更新状态。</span></p>
<p class="MsoNormal"><span><b>第六步：</b>收款方客户端将数字货币发送给其他结算处更新状态。</span></p>
<p class="MsoNormal"><span><b>第七步：</b>其他结算处向默认结算处确认，待全部确认后该数字货币才能再次流通。</span></p>
<table border="1">
    <tbody>
        <tr>
            <th>数字货币编号</th>
            <th>收款者Unionid</th>
            <th>易主次数</th>
            <th>状态</th>
        </tr>
        <tr>
            <td><b style="color:#00B050;">12345678901230</b></td>
            <td>777777777123456783</td>
            <td>3</td>
            <td>正常流通</td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal"><span><b>注意事项：</b><br>
第三四五六七步如果未能正常完成，则这些数字货币会一直处于“非正常流通”状态。<br>
付款时应按数字货币的获得时间倒序排序，尽量优先使用最先获得的数字货币，以防止最新获得的数字货币尚不能正常流通。<br>
结算处应优先处理大额数字货币，第五六七步应争取在1分钟内完成，以防止影响再次流通。<br>
如果发生退款则应在当前交易确认后重新发起一笔新的关联交易。</span></p>
<p class="MsoNormal"><span><b>无网络当面交易：</b>付款方使用联盟客户端将所需金额的数字货币打包成一个二维码并设定不小于24小时的最迟交易时间，付款方客户端会暂时冻结这些数字货币防止付款方重复使用；收款方扫描该二维码获得数字货币和交易密码，完成初步交易；双方任意一方联网后再向结算处发送请求。如果最迟交易时间内未能完成交易或收款方联网后拒绝完成交易则付款方可向默认结算处发送更新密码的请求，更新完成后重新恢复“正常流通”状态。</span></p>

<h3><span>贡献值分红</span></h3>
<p class="MsoNormal"><span>如果交易附带贡献值，结算时会自动为收款方记录付款方的等额贡献值。</span></p>
<table border="1">
    <tbody>
        <tr>
            <th>1千贡献值编号</th>
            <th>收款方Unionid</th>
            <th>付款方Unionid</th>
            <th>获得时间</th>
        </tr>
        <tr>
            <td>98765432101234</td>
            <td>777777777123456783</td>
            <td>888888888123456782</td>
            <td>1719763200000</td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal"><span>付款方向收款方分红时，以此记录为依据。贡献值编号也可以自动换零，只有付款方能对该记录进行分红操作，已获得分红的贡献值会先交易给原付款方后被结算处回收。<br>
本例假设付款方向收款方分红10%，其中编号为<b style="color:#00B0F0;">987654321012340</b>的贡献值会被回收：</span></p>
<table border="1">
    <tbody>
        <tr>
            <th>将1千贡献值拆分成10个百</th>
            <th>收款方Unionid</th>
            <th>付款方Unionid</th>
        </tr>
        <tr>
            <td>987654321012349</td>
            <td>777777777123456783</td>
            <td>888888888123456782</td>
        </tr>
        <tr>
            <td>987654321012348</td>
            <td>777777777123456783</td>
            <td>888888888123456782</td>
        </tr>
        <tr>
            <td>987654321012347</td>
            <td>777777777123456783</td>
            <td>888888888123456782</td>
        </tr>
        <tr>
            <td>987654321012346</td>
            <td>777777777123456783</td>
            <td>888888888123456782</td>
        </tr>
        <tr>
            <td>987654321012345</td>
            <td>777777777123456783</td>
            <td>888888888123456782</td>
        </td>
        <tr>
            <td>987654321012344</td>
            <td>777777777123456783</td>
            <td>888888888123456782</td>
        </tr>
        <tr>
            <td>987654321012343</td>
            <td>777777777123456783</td>
            <td>888888888123456782</td>
        </tr>
        <tr>
            <td>987654321012342</td>
            <td>777777777123456783</td>
            <td>888888888123456782</td>
        </tr>
        <tr>
            <td>987654321012341</td>
            <td>777777777123456783</td>
            <td>888888888123456782</td>
        </tr>
        <tr>
            <td><b style="color:#00B0F0;">987654321012340</b></td>
            <td><b style="color:#00B0F0;">888888888123456782</b></td>
            <td><b style="color:#00B0F0;">777777777123456783</b></td>
        </tr>
    </tbody>
</table>
<p class="MsoNormal"><span>收款方获得100数字货币的分红交易记录：</span></p>
<table border="1">
    <tbody>
        <tr>
            <th>数字货币编号</th>
            <th>收款方Unionid</th>
            <th>易主次数</th>
            <th>状态</th>
        </tr>
        <tr>
            <td><b style="color:#C00000;">123456789012345</b></td>
            <td>777777777123456783</td>
            <td>3</td>
            <td>正常流通</td>
        </tr>
    </tbody>
</table>

<h3><span>更换结算处</span></h3>
<p class="MsoNormal"><span>主体A通过F结算处付款给主体B，主体B被动获得了F结算处的数字货币，主体B可选择继续使用F结算处并成为F结算处团队的新成员，也可将数字货币从F结算处移转至自己常用的E结算处。主体B只需提交转移请求，由E结算处先创建一个等额的充值请求，再从F结算处直接提现至E结算处完成充值，该操作属于账号内部转移，数字货币的编号会变成E结算处的新编号，E结算处自动成为该数字货币的默认结算处。</span></p>


<h2 style="text-align:center;"><span>结束语</span></h2>
<p class="MsoNormal"><span>主体无论将货币存储在哪个结算处都会成为对方的团队成员，都能获得对应的收益，数据会变得复杂一些，但操作和展示并没有区别。所以主体关联的结算处越多越好，结算处本身也是一个团体，不要把鸡蛋放在一个篮子里，万一结算处出现故障还可以使用其他结算处。</span></p>

<p class="MsoNormal"><span>&nbsp;</span></p>
</div>